单细胞转录组高级分析四:scRNA数据推断CNV
单细胞转录组基础分析专题
原始数据进行标准化处理,去除测序深度不同造成的差异,结果是流程图中的第1个热图;
依据上文“分析原理”提到的公式把基因表达值转换为CNV值,结果是流程图中的第2个热图;
对每个细胞的CNV值进行中心化处理,使细胞之间相同染色体区域的CNV值具有可比性,结果是流程图中的第3个热图;
用肿瘤细胞的CNV值减去对应区域正常细胞的CNV值,使热图展现的CNV结果更直观,结果是流程图中的第4个热图;
如果infercnv::run函数中的参数denoise=TRUE,则使用算法进一步去除背景噪音凸显CNV区域,结果是流程图中的蓝框左图;
如果infercnv::run函数中的参数HMM=TRUE,则使用隐马尔可夫模型(Hidden Markov Model, HMM)预测CNV区域,并用贝叶斯潜在混合模型(Bayesian Network Latent Mixture Model)对结果进行校正,结果是流程图中的蓝框下图。
#安装发行版,作者推荐
if (!requireNamespace("BiocManager", quietly = TRUE))
install.packages("BiocManager")
BiocManager::install("infercnv")
#安装github上的最新版
library("devtools")
devtools::install_github("broadinstitute/infercnv")
library(infercnv)
library(tidyverse)
dir.create("inferCNV")
dir.create("inferCNV/test")
##读取示例数据目录
exprMatrix = system.file("extdata", "oligodendroglioma_expression_downsampled.counts.matrix.gz", package="infercnv")
cellAnnota = system.file("extdata", "oligodendroglioma_annotations_downsampled.txt", package="infercnv")
geneLocate = system.file("extdata", "gencode_downsampled.EXAMPLE_ONLY_DONT_REUSE.txt", package="infercnv")
#创建inferCNV对象,直接给相应的文件路径即可
infercnv_obj = CreateInfercnvObject(delim = '\t',
raw_counts_matrix = exprMatrix,
annotations_file = cellAnnota,
gene_order_file = geneLocate,
ref_group_names = c("Microglia/Macrophage","Oligodendrocytes (non-malignant)"))
##分析细胞CNV
#cutoff阈值,Smart-seq2数据选“1”, 10x Genomics数据选“0.1”
infercnv_obj = infercnv::run(infercnv_obj,
cutoff=1,
out_dir='inferCNV/test',
cluster_by_groups=TRUE,
denoise=TRUE,
HMM=TRUE)
library(Seurat)
library(infercnv)
library(tidyverse)
scRNAsclc <- readRDS("inferCNV/scRNAsclc.rds")
cellAnnota <- subset(scRNAsclc@meta.data, select='celltype')
exprMatrix <- as.matrix(GetAssayData(scRNAsclc, slot='counts'))
write.table(exprMatrix, 'inferCNV/exprMatrix.txt', col.names=NA, sep='\t')
write.table(cellAnnota, 'inferCNV/cellAnnota.txt', col.names=F, sep='\t')
如果用自己测序的数据分析,可以找测序公司要,这个最准确;
使用broad准备好的文件,问题是版本太老了,会有一些数据丢失;
下载基因组对应的GTF文件,自己提取基因坐标信息,这个对初学者可能有点困难。
broad准备好的文件:https://data.broadinstitute.org/Trinity/CTAT/cnv/
#创建inferCNV对象
#all_celltype: B_cell Monocyte Neurons NK_cell T_cells
infercnv_obj = CreateInfercnvObject(delim = '\t',
raw_counts_matrix = 'inferCNV/exprMatrix.txt',
annotations_file = 'inferCNV/cellAnnota.txt',
gene_order_file = 'inferCNV/geneLocate.txt',
ref_group_names = c("B_cell","Monocyte","NK_cell","T_cells"))
dir.create("inferCNV/gse149180")
#10x数据cutoff推荐使用0.1
infercnv_obj = infercnv::run(infercnv_obj,
cutoff=0.1,
out_dir='inferCNV/gse149180/',
cluster_by_groups=TRUE,
denoise=TRUE,
HMM=TRUE)
最终会输出很多文件在out_dir
的目录下,它们可以分为中间过程数据、初步分析结果、去噪分析结果、HMM预测后结果、最终分析结果5部分。注意文件名称,infercnv开头的是分析结果,其他都是中间数据。剩余的文件注意关键字preliminary、denosied、HMM,分别是初步结果、去噪结果和HMM预测结果,没有这些关键字的是最终结果。我们以最终结果的系列文件来说明一下:
infercnv.png : 去噪之后的最终热图
infercnv.references.txt : 正常细胞的CNV分值矩阵
infercnv.observations.txt : 肿瘤细胞的CNV分值矩阵
infercnv.observation_groupings.txt : 肿瘤细胞的聚类分组
infercnv.observations_dendrogram.txt : 热图的newick格式文件
HMM模型预测的结果不是连续的分值,而是用6种数值代表不同的状态:
0:完全缺失数的变异
0.5: 缺失一个拷贝数的变异
1:正常
1.5:增加一个拷贝数的变异
2:增加两个拷贝数的变异
3:所有大于两个拷贝数的变异
本教程的目的在于把单细胞分析流程串起来,适合有一定R语言基础的朋友参考。分析原理和代码我没有详细解释,官网有详细的教程和权威的解释,翻译好的中文教程也有多个版本,有兴趣的可以搜索一下。如果您学习本教程有一定困难,可以分享此篇文章到朋友圈,截图微信发给Kinesin(文末二维码),我会抽时间组群直播讲解单细胞数据分析的全过程。本专题所用的软件、数据、代码脚本和中间结果,我打包放在了百度云上,需要的朋友添加Kinesin微信索取。